package com.wingsboat.interfaces;

/**
 * 过滤器链节点
 *
 * @author wangzhong
 */
public interface FilterChain<T extends FilterContext> {

    /**
     * 获取过滤实体
     * @return
     */
    Filter getFilter();

    /**
     * 获取下一个过滤链节点
     * @return
     */
    FilterChain getNextFilterChain();

    /**
     * 设置next
     * @param filterChain
     * @return
     */
    FilterChain setNextFilterChain(FilterChain filterChain);

    /**
     * 过滤操作
     * @param filterContext 过滤上下文
     */
    void handle(T filterContext);

    /**
     * 传递
     * @param filterContext 过滤上下文
     */
    void fireNext(T filterContext);

}
